\documentclass[t]{beamer}

%general stuff
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}

%utils
\usepackage{ifthen}


%beamer stuff
%\setbeameroption{show notes}
\setbeameroption{hide notes}

%\usetheme{Luebeck}
%\usetheme{Montpellier}
\usetheme{Szeged}
%\usetheme{Ilmenau}


%style mods
\makeatletter
                % Head
\setbeamertemplate{headline}
{%
  \begin{beamercolorbox}[colsep=1.5pt]{upper separation line head}
  \end{beamercolorbox}
  \begin{beamercolorbox}{section in head/foot}
    \vskip2pt\insertnavigation{\paperwidth}\vskip2pt
  \end{beamercolorbox}%
  \ifbeamer@theme@subsection%
    \begin{beamercolorbox}[colsep=1.5pt]{middle separation line head}
    \end{beamercolorbox}
    \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,%
      leftskip=.3cm,rightskip=.3cm plus1fil]{subsection in head/foot}
      \usebeamerfont{subsection in head/foot}\insertsubsectionhead \hfill \insertsubsubsectionhead
    \end{beamercolorbox}%
  \fi%
  \begin{beamercolorbox}[colsep=1.5pt]{lower separation line head}
  \end{beamercolorbox}
}

\makeatother

\newcommand{\interframe}[1][shaded]{%
\begin{frame}
\tableofcontents[currentsection,currentsubsection,currentsubsubsection,subsubsectionstyle=show/#1/shaded]
\end{frame}%
}

\AtBeginSubsection[] % Do nothing for \section*
{
\interframe[show]
}

\AtBeginSubsubsection%
{
\interframe
}


% code typesetting
\usepackage{listings}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{purple}{rgb}{0.6,0,0.6}
\lstset{language=Matlab,
   keywords={break,case,catch,continue,else,elseif,end,for,function,
      global,if,otherwise,persistent,return,switch,try,while},
   basicstyle=\ttfamily,
   keywordstyle=\color{blue},
   commentstyle=\color{dkgreen},
   stringstyle=\color{purple},
   numbers=none,
   numberstyle=\tiny\color{gray},
   stepnumber=1,
   numbersep=10pt,
   backgroundcolor=\color{white},
   breaklines=true,
   breakatwhitespace=true,
   tabsize=4,
   showspaces=false,
   showstringspaces=false,
   escapeinside={\%*}{*)}}

%\lstMakeShortInline§



% my macros
\newcommand{\yinggai}{\stackrel{!}{=}}
\newcommand{\norm}[2][]{\ensuremath{|| #2 ||_{#1}}}
\newcommand{\scp}[3][]{<#2,#3>_{#1}}




\newcommand{\notetoself}[1]{\note[item]{#1}}
\let\nts\notetoself

\definecolor{xc}{HTML}{001DC6}
\definecolor{uc}{HTML}{00FF00}
\definecolor{yc}{HTML}{7387FF}
\definecolor{vc}{HTML}{BF2F75}
\definecolor{qmc}{HTML}{FF5112}

\newcommand{\x}[1]{\mm{{\color{xc}{x\ifthenelse{\equal{#1}{}}{}{_{#1}}}}}}
\newcommand{\y}[1]{\mm{{\color{yc}{y\ifthenelse{\equal{#1}{}}{}{_{#1}}}}}}
\newcommand{\vv}[1]{\mm{{\color{vc}{v\ifthenelse{\equal{#1}{}}{}{_{#1}}}}}}
\newcommand{\uu}[1]{\mm{{\color{uc}{u\ifthenelse{\equal{#1}{}}{}{_{#1}}}}}}

\newcommand{\mm}[1]{\ensuremath{#1}}
\newcommand{\yr}{\mm{{\color{yc}{\overline{y}_k}}}}
\newcommand{\distr}{\sim}

\newcommand{\sysscale}{1}

\newcommand{\qm}{{\color{qmc}?}}



\title{Systemidentifikation}
\author{Nicole Geissberger 0826904, Manuel Eder 0827050}
\date{20. Januar 2012}

\begin{document}
\begin{frame}
 \titlepage
\end{frame}

\section*{Überblick}
\begin{frame}
 \tableofcontents
\end{frame}


\section[Worum geht es?]{Was ist Systemidentifikation?}

\subsection{Welche Systeme kann man identifizieren?}

\begin{frame}
\vspace{0pt}
 \includegraphics[trim=0mm 8mm 0mm 0mm,scale=1,angle=0]{system}

\begin{align*}
 \x{k+1} & = f(\x{k},\uu{k},\vv{k}) \\
 \y{k+1} & = g(\x{k+1})
\end{align*}

\end{frame}


\subsection{Was kann man an diesen Systemen identifizieren?}

\begin{frame}
\vspace{0pt}
 \includegraphics[trim=0mm 8mm 0mm 0mm,scale=\sysscale,angle=0]{system_lsi_general}
 
\begin{align*}
 f & = {\color{qmc}?}
\end{align*}

\end{frame}

\begin{frame}
 \includegraphics[trim=0mm 8mm 0mm 0mm,scale=\sysscale,angle=0]{system_state_general}
 
\begin{align*}
 \x{k} & = {\color{qmc}?}
\end{align*}

\end{frame}

\begin{frame}
 \includegraphics[trim=0mm 0mm 0mm 0mm,scale=\sysscale,angle=0]{system}

\begin{center}
{\Huge . . . \color{qmc}?}
\end{center}

\end{frame}

\section[Was haben wir gemacht?]{Welche Algorithmen haben wir implementiert?}
\nts{dazu sagen: wir haben eben diese zwei algorithmen implementiert, sowohl in Matlab, als auch in Simulink}

\subsection{Least Squares Identifikation}

\subsubsection{Was identifiziert die Least Squares Identifikation?}
%\interframe

\begin{frame}
\setbeamercovered{invisible}
 \only<1>{\includegraphics[trim=0mm 6mm 0mm 0mm,scale=\sysscale,angle=0]{system_lsi}}
 \only<2>{\includegraphics[trim=0mm 6mm 0mm 0mm,scale=\sysscale,angle=0]{system_lsi_qm}}

\begin{align*}
 \y{k} & = \sum_{i=1}^n{a_i \y{k-i}} + \sum_{i=0}^{m}{b_i \uu{k-i}} \onslide<2->{\qquad  a_i = \qm \quad b_i = \qm}
\end{align*}
\end{frame}

\subsubsection{Wie tut sie das?}

\begin{frame}[shrink=21]
\begin{align*}
& Y^T & :&= (y_{\max\{n,m\}}, \dots, y_{N})^T  \\
& S   & :&= \begin{pmatrix}
-y_{\max\{n,m\}-1}  & \dots & -y_{\max\{n,m\}-n} & u_{\max\{n,m\}} & \dots & u_{\max\{n,m\}-m}  \\
\vdots & \ddots &  & \vdots & \ddots &\\
-y_{N-1}  &  \dots & -y_{N-n} & u_{N} & \dots &u_{N-m}
\end{pmatrix} \\
& p^T & :&= (a_1, \dots, a_n, b_0, \dots, b_m)^T
\end{align*}
\begin{align*}
Y &  \yinggai S p
\intertext{\color{red}geht nicht, weil überbestimmt!} 
\intertext{Also suchen wir ein $\hat{p}$, sodass:}
\norm[2]{Y - S \hat{p}} & \yinggai \min_{p}{\norm[2]{X - S p}}
\end{align*}
\end{frame}

\begin{frame}[shrink=20]
 \begin{align*}
\norm[2]{Y - S \hat{p}} & \yinggai \min_{p}{\norm[2]{Y - S p}} \\
&\implies \nts{Hilbertraum}\\
%\scp[2]{S}{Y-S \hat{p}} & = 0 \text{ (spaltenweise für $S = \vec{(S_i)}, i=1,\dots,N$)}\\
S^T (Y-S \hat{p}) & = 0 \\
S^T Y - S^T S \hat{p} & = 0 \\
S^T S \hat{p} & = S^T Y \\
\hat{p} & = (S^T S)^{-1} S^T Y
 \end{align*}
\nts{Hier auf jeden Fall dazusagen, dass sich das auch rekursiv formulieren lässt.}
\end{frame}



\subsubsection{Welche Systeme kann die Least Squares Identifikation (nicht) identifizieren?}

%\interframe
%Und was müssen wir bereits wissen?
\begin{frame}
 \frametitle{Einsatzmöglichkeiten / Einschränkungen}
\begin{itemize}
 \item System muss linear sein.
 \item Welche Bedeutung hat der Fehler, den wir minimieren? \nts{Dazusagen, dass wir klarerweise %
  diesen Fehler gewählt haben, weil dann halt das Problem irgendwie leicht lösbar wird. Erwähnen, %
  dass wir auch ein anderes Skalarprodukt hätten wählen können.}
 \item Wir müssen im Wesentlichen die Ordnung des Systems im Vorhinein kennen, oder auf andere Art schätzen. %
  \nts{Ordnung schätzen geht, da gibt's z.B. die LTI-System-Toolbox, die das macht, wir haben's aber nicht implementiert.}
 \item \hypertarget{rLSIreturn}{}\hyperlink{rLSI}{Die Least Squares Identifikation lässt sich auch rekursiv formulieren (real-time-geeignet!).}
\end{itemize}

\end{frame}



\subsubsection{Implementierung}

%\interframe

\begin{frame}[fragile]
 \frametitle{Matlab}
\begin{lstlisting}
system=tf([ucoeff;0].',[1;-ycoeff].', %
  stepsize,'Variable','z');
y=lsim(system,u,t);
S = zeros(length(ys),yl+ul);
for k=1:yl
    S(:,k)=y(max(n,m)-k:end-k);
end
for k=0:(ul-1)
    S(:,k+1+yl)=u(max(n,m)-k:end-k);
end
phat = linsolve((S.' * S), (S.' * %
  y(max(n,m):end)));
\end{lstlisting}
\note{gekürzt}
\end{frame}

\begin{frame}
 \frametitle{Simulink}
\begin{center}
 \includegraphics[trim=3.3cm 5.2cm 5cm 5cm,clip,scale=0.5,angle=0]{../rls1}
\end{center}
\end{frame}

\begin{frame}
 \frametitle{Simulink - identify}
\begin{center}
 \includegraphics[trim=0cm 0cm 0cm 0cm,clip,scale=0.38,angle=0]{../rls2}
\end{center}
\begin{align*}
k_{N+1} & = P_N s_{N+1}^T (1 + s_{N+1} P_N s_{N+1}^T)^{-1} \\
P_{N+1} & = P_N - k_{N+1} s_{N+1} P_N \\
\hat{p_{N+1}} & = \hat{p_N} + k_{N+1} (y_{N+1} - s_{N+1} \hat{p_N}) 
\end{align*}
\end{frame}

\begin{frame}
 \frametitle{Simulink - Konvergenz des Schätzers über die Zeit}
\begin{center}
 \includegraphics[trim=0cm 0cm 0cm 0.5cm,clip,width=0.5\textwidth,height=55mm,angle=0]{../rlsconva} 
 \includegraphics[trim=0cm 0cm 0cm 0.5cm,clip,width=0.5\textwidth,height=55mm,angle=0]{../rlsconvb}
\end{center}
\end{frame}

%Matlab, Simulink

\subsection{Kalman-Filter}

\subsubsection{Was identifiziert das Kalman-Filter?}

\begin{frame}
\setbeamercovered{invisible}
 \only<1>{\includegraphics[trim=0mm 6mm 0mm 0mm,scale=\sysscale,angle=0]{system_kalman}}
 \only<2>{\includegraphics[trim=0mm 6mm 0mm 0mm,scale=\sysscale,angle=0]{system_kalman_qm}}

\begin{align*}
\begin{split}
\x{k+1} & = \Phi_k \x{k} + \Gamma_k \uu{k} + G_k {\color{vc} w_k} \\
\y{k+1} & = C_{k+1} \x{k+1} + D_{k+1} \uu{k+1} + H_{k+1} {\color{vc} w_{k+1}} + \vv{k+1}
\end{split} \onslide<2->{\qquad  \x{k+1} = \qm}
\end{align*}
\end{frame}

\subsubsection{Wie tut es das?}
%\interframe
\newcommand{\w}[1]{\mm{\color{vc}w_{#1}}}
\begin{frame}[shrink=1]
 \frametitle{Grobe Idee:}
 \begin{itemize}
  \item Wir setzen voraus:
    \begin{itemize}
     \item $\x{k}$, ${\color{vc}w_{k}}$ und $\vv{k}$ sind Zufallsvektoren, deren Verteilung wir kennen
     \item $\uu{k}$ und $\Phi_k$, $\Gamma_k$, $G_k$, $C_k$, $D_k$, $H_k$ sind deterministisch und ebenfalls bekannt
    \end{itemize}
  \item Berechne $\begin{pmatrix}\x{k} \\ {\color{vc}w_{k}} \\ \y{k} \end{pmatrix} \distr \qm$ durch Einsetzen in die Systemgleichungen
  \item Berechne $\left.\begin{pmatrix}\x{k} \\ {\color{vc}w_{k}} \end{pmatrix} \right| \y{k}=\yr \distr \qm$
  \item Berechne $\x{k+1} \distr \qm$ aus $\begin{pmatrix}\x{k} \\ {\color{vc}w_{k}} \end{pmatrix} \left| \y{k}=\yr \right.$ und den Systemgleichungen 
 \end{itemize}
\nts{und natürlich repeat}
\end{frame}


\subsubsection{Welche Systeme kann das Kalman-Filter (nicht) identifizieren?}
%Und was müssen wir bereits wissen?
\begin{frame}
 \frametitle{Einsatzmöglichkeiten / Einschränkungen}
\begin{itemize}
 \item Damit die Verteilungen explizit berechenbar sind, müssen die Ausgangsverteilungen passend gewählt sein.
 \item meist Normalverteilungen
 \item daher auch nur lineare Systeme \nts{$\x{k} \distr N$ und lineare Systeme, weil dann alles andere auch Normalverteilt ist}
 \item Systemgleichungen müssen bereits vollständig bekannt sein.
\end{itemize}
\end{frame}


\subsubsection{Implementierung}

%\interframe

\newcommand{\normalv}[2]{N\left(#1,#2\right)}
\newcommand{\isN}[2]{{\mm{\distr \normalv{#1}{#2}}}}
\newcommand{\sw}{\mm{{\color{vc}{\Sigma_{w_k}}}}}
\newcommand{\svau}[1][k]{\mm{{\color{vc}\Sigma_{v_{#1}}}}}
\newcommand{\sx}{\mm{{\color{xc}\Sigma_{x_k}}}}
\newcommand{\mx}{\mm{{\color{xc}\mu_{x_k}}}}
\newcommand{\C}{\mm{C_k}}
\newcommand{\Ph}{\mm{\Phi_k}}
\newcommand{\G}{\mm{G_k}}
\newcommand{\Ha}{\mm{H_k}}
\newcommand{\Ga}{\mm{\Gamma_k}}
\newcommand{\D}{\mm{D_k}}
\newcommand{\trans}[1]{{#1}^T}

\begin{frame}
% \frametitle{Implemetierung}
 $\x{k} \isN{\mx}{\sx}$ und $\w{k} \isN{0}{\sw}$ sowie $\vv{k} \isN{0}{\svau}$, mit $\x{k}$, $\w{k}$ und $\vv{k}$ untereinander unkorreliert $\implies$
\begin{align*}
\begin{split}
\x{k+1} \distr & 
N \Biggl(
\Ph \mx + \Ga \uu{k} + \left(\Ph \sx \trans{\C} + \G \sw \trans{\Ha}\right) \\ & \left(\C \sx \trans{\C} + \Ha \sw \trans{\Ha} + \svau \right)^{-1} \left(\yr - \C \mx - \D \uu{k} \right), \\
& \Ph \sx \trans{\Ph} + \G \sw \trans{\G} - \left(\Ph \sx \trans{\C} + \G \sw \trans{\Ha}\right) \\ & \left(\C \sx \trans{\C} + \Ha \sw \trans{\Ha} + \svau \right)^{-1} \\ & \left(\C \sx \trans{\Ph} + \Ha \sw \trans{\G} \right) 
\Biggr)
\end{split}
\end{align*}
\end{frame}

\begin{frame}
 \begin{align*}
  \hat{K}_k = & \left(\Ph \sx \trans{\C} + \G \sw \trans{\Ha} \right) \\ & \left(\C \sx \trans{\C} + \Ha \sw \trans{\Ha} + \svau \right)^{-1} \\%\Phi_k \sx \trans{C_k} (C_k \sx \trans{C_k} + H_k \sw \trans{\Ha} + R_k)^{-1} \\
  \hat{\x{k+1}} = & \, \Ph \mx + \Ga \uu{k} + \hat{K}_k \left(\yr - \C \mx - \D \uu{k} \right) \\
  {\color{xc}P_{k+1}} = & \, \Ph \sx \trans{\Ph} + G_k \sw \trans{G_k} - \hat{K}_k \left(\C \sx \trans{\Ph} + \Ha \sw \trans{\G} \right)
\end{align*}
\end{frame}


\begin{frame}[fragile]
 \frametitle{Matlab - Setup}
\begin{lstlisting}
for k=1:N
    prev=random('Normal',0,1);
    prew=[random('Normal',0,1,2,1)]; 
    w=preQ*prew;
    x(:,k+1)=Phi*x(:,k)+ Gamma*u(k) + G*w;
    y(k)=C*x(:,k) + D*u(k) + H*w + v;
end
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
 \frametitle{Matlab - Identifikation}
 \begin{lstlisting}
for k=1:N
	K = (Phi*P(:,:,k)*C' + G*Q*H.')*((C*P(:,:,k)*C'+H*Q*H'+R)^(-1));
	xhat(:,k+1) = Phi*xhat(:,k) + Gamma*u(k) + K*(y(k)-C*xhat(:,k)-D*u(k));
	P(:,:,k+1) = Phi*P(:,:,k)*Phi' + G*Q*G' - K*(C*P(:,:,k)*Phi' + H*Q*G.');
end
\end{lstlisting}
\end{frame}

\begin{frame}
 \frametitle{Simulink - Setup}
 \includegraphics[trim=0cm 0cm 0cm 0cm,clip,scale=0.35,angle=90]{../kalman1} 
\end{frame}

\begin{frame}
 \frametitle{Simulink - System}
\begin{center}
 \includegraphics[trim=3cm 2.2cm 3cm 2.6cm,clip,scale=0.35,angle=0]{../kalman3} 
\end{center}
\end{frame}

\begin{frame}[fragile]
 \frametitle{Simulink - Identifikation}
 \begin{lstlisting}
function [xkplus1,Pkplus1] = kalman(u,Phi,Gamma,G,C,D,H,Q,R,xk,Pk,y)

K = (Phi*Pk*C' + G*Q*H.')*((C*Pk*C'+H*Q*H'+R)^(-1));
xkplus1 = Phi*xk + Gamma*u + K*(y-C*xk-D*u);
Pkplus1 = Phi*Pk*Phi.' + G*Q*G.' - K*(C*Pk*Phi.' + H*Q*G.');

end
\end{lstlisting}

\end{frame}



%Matlab, Simulink

\section{Fragen?}

%\interframe
\interframe

\begin{frame}
\vspace*{\fill}
\begin{center}
\Huge Fragen?
\end{center}
\vspace*{\fill}
\end{frame}

\appendix

\begin{frame}
\vspace*{\fill}
\begin{center}
\Huge Danke für's Zuhören!!
\end{center}
\vspace*{\fill}
\end{frame}




\begin{frame}
 \frametitle{Appendix}
\end{frame}


\begin{frame}[shrink=33]
\hypertarget{rLSI}{}
\frametitle{Least Squares - rekursiv \hyperlink{rLSIreturn}{\beamerreturnbutton{}}}
\begin{align*}
\hat{p_N} & = (S_N^T S_N)^{-1} S_N^T Y_N \\
\hat{p_{N+1}} & = (S_{N+1}^T S_{N+1})^{-1} S_{N+1}^T Y_{N+1}
\end{align*}
\begin{align*}
Y_N^T & = (y_{\max\{n,m\}}, \dots, y_{N})^T \\
S_N & = \begin{pmatrix}
-y_{\max\{n,m\}-1}  & \dots & -y_{\max\{n,m\}-n} & u_{\max\{n,m\}} & \dots & u_{\max\{n,m\}-m}  \\
\vdots & \ddots &  & \vdots & \ddots &\\
-y_{N-1}  &  \dots & -y_{N-n} & u_{N} & \dots &u_{N-m}
\end{pmatrix} \text{ .}
\end{align*}
Lemma zur Matrizeninversion:
\begin{align*}
(A+BCD)^{-1} & = A^{-1} - A^{-1} B (C^{-1} + D A^{-1} B)^{-1} A^{-1} \\
 & \implies \dots \implies \\
k_{N+1} & = P_N s_{N+1}^T (1 + s_{N+1} P_N s_{N+1}^T)^{-1} \\
P_{N+1} & = P_N - k_{N+1} s_{N+1} P_N \\
\hat{p_{N+1}} & = \hat{p_N} + k_{N+1} (y_{N+1} - s_{N+1} \hat{p_N}) 
\end{align*}
\end{frame}

\end{document}
